//
//  CZEmoticonManager.swift
//  61.新工程表情键盘
//
//  Created by apple on 16/3/7.
//  Copyright © 2016年 itcast. All rights reserved.
//

import UIKit

/// 处理表情和表情包的相关操作
class CZEmoticonManager: NSObject {
    // 单例
    static let sharedManager: CZEmoticonManager = CZEmoticonManager()
    
    // Emoticons.bundle的路径
    let emoticonsBundlePath = NSBundle.mainBundle().pathForResource("Emoticons", ofType: "bundle")!
    
    /// 所有表情包模型属性,懒加载,只加载一次
    lazy var emoticonPackages: [CZEmoticonPackageModel] = self.loadEmoticonPackages()
    
    /**
     加载单个表情包数据
     
     - parameter id: 表情包文件夹名称
     */
    private func loadEmoticonPackage(id: String) -> CZEmoticonPackageModel {
        // 加载每个表情包对应的info.plist
        // info.plist = Emoticons.bundle/id/info.plist
        let infoPath = emoticonsBundlePath + "/" + id + "/" + "info.plist"
        
        // 加载info.plist到内存中
        let infoDict = NSDictionary(contentsOfFile: infoPath)!
        
        // 解析infoDict
        // 获取 group_name_cn
        let group_name_cn = infoDict["group_name_cn"] as! String
        
        // 获取 emoticons 表情数组
        let emoticonsArray = infoDict["emoticons"] as! [[String: String]]
        
        // 数组记录表情模型
        var emoticons = [CZEmoticonModel]()
        
        // 遍历表情数组
        for dict in emoticonsArray {
            // 将每个表情字典转成表情模型
            let emoticonModel = CZEmoticonModel(dict: dict)
            emoticons.append(emoticonModel)
        }
        
        // 所有的表情模型都加载完成了,创建表情包模型
        let package = CZEmoticonPackageModel(id: id, group_name_cn: group_name_cn, emoticons: emoticons)
        return package
    }
    
    /**
     加载所有表情包,只需要从磁盘上加载一次,方法不暴露给别人
     
     - returns: 所有表情包
     */
    private func loadEmoticonPackages() -> [CZEmoticonPackageModel] {
        // 创建最近表情包, 没有id,一创建没有表情
        let recentModel = CZEmoticonPackageModel(id: "", group_name_cn: "最近", emoticons: [CZEmoticonModel]())
        
        let defaultModel = loadEmoticonPackage("com.sina.default")
        let emojiModel = loadEmoticonPackage("com.apple.emoji")
        let lxhModel = loadEmoticonPackage("com.sina.lxh")
        
        return [recentModel, defaultModel, emojiModel, lxhModel]
    }
    
}
